from docx import Document
from lxml import etree
import os
import fnmatch

def find_docx_files(directory='.'):
    # 列出目录中的所有文件和文件夹
    entries = os.listdir(directory)
    # 初始化一个空列表来存储匹配的.docx文件名
    docx_files = []
    
    # 遍历目录中的每个条目
    for entry in entries:
        # 使用fnmatch.fnmatch来检查文件名是否以.docx结尾
        if fnmatch.fnmatch(entry, '*.docx'):
            # 如果是.docx文件，则添加到列表中
            docx_files.append(entry)
    
    return docx_files

def remove_section_breaks(doc_path):
    # 打开文档
    doc = Document(doc_path)
    
    # 获取文档的根元素
    root = doc.element
    
    # 查找所有的<w:sectPr>元素
    section_breaks = root.findall('.//{http://schemas.openxmlformats.org/wordprocessingml/2006/main}sectPr', namespaces={'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'})
    
    # 查找所有的<w:p>元素
    wp_s=root.findall('.//{http://schemas.openxmlformats.org/wordprocessingml/2006/main}p', namespaces={'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'})
    
    # 删除倒数第二个<w:sectPr>元素
    s_ps=section_breaks[-2].getparent()
    s_ps.remove(section_breaks[-2])
    
    # 删除最后一个<w:p>元素
    p_ps=wp_s[-1].getparent()
    p_ps.remove(wp_s[-1])
        
    # 保存修改后的文档
    doc.save(os.getcwd()+'\\out\\'+ doc_path)

if __name__ == '__main__':

    if not os.path.exists('out'):
        os.mkdir('out')        

    docx_files = find_docx_files()
    for f in docx_files:
        remove_section_breaks(f)
    print("完成")